local assets = -- 定义预制件所需的资源
{
    Asset("ANIM", "anim/shadowhandsfx.zip"),  -- 特效动画文件
}

local function fn() -- 预制件的构造函数
    local inst = CreateEntity() -- 创建实体实例

    --[[Non-networked entity]]
    -- inst.entity:AddTransform() -- 添加变换组件，用于位置、旋转和缩放
    -- inst.entity:AddAnimState() -- 添加动画状态组件，用于播放动画
    -- inst.entity:AddSoundEmitter() -- 添加声音发射器组件 (如果需要音效)
    -- inst.entity:AddNetwork() -- 添加网络组件，用于同步状态

    -- 添加网络组件，确保特效在所有客户端可见
    inst.entity:AddNetwork()

    inst.entity:AddTransform()       -- 添加坐标变换组件，允许实体在世界中定位
    local anim = inst.entity:AddAnimState()       -- 添加动画状态组件，用于控制动画播放
    anim:SetBank("shadowhandsfx") -- 设置动画库(Bank)为 "shadowhandsfx"
    anim:SetBuild("shadowhandsfx") -- 设置动画构建(Build)为 "shadowhandsfx"
    anim:PlayAnimation("catch") -- 播放名为 "catch" 的动画
    anim:SetScale(0.7,0.7,0.7) -- 设置动画的缩放比例为 70%

    -- 设置为纯净状态，表示这个实体不需要持久化保存
    inst.entity:SetPristine()

    if not TheWorld.ismastersim then -- 检查当前是否在主模拟环境（服务器）
        -- 如果是客户端模拟环境，直接返回实例，特效由客户端自行处理
        return inst
    end

    -- 如果在主模拟环境（服务器），则在1秒后移除该特效实体
    inst:DoTaskInTime(1, inst.Remove)
    return inst -- 返回创建的实体实例
end

-- 注册名为 "shadowhandsfx" 的预制件
-- fn 是创建实例的函数
-- assets 是该预制件所需的资源
return Prefab("shadowhandsfx", fn, assets)